The use of file templates has become commonplace for computer users in variety of applications in which users create and save data in a file. File templates allow a user to create a new file with a readymade set of initial properties, instead of starting work on a new file from scratch. One common template is a letter template in a word processing program, such as MICROSOFT WORD®. A user of such a template may first select the appropriate template, which operates to create a new file with desirable file properties. The user may then be prompted to enter data into several fields. For example, the user may fill in an address field, a date field, a salutation field, and so on. After inserting data into the fields, the user may go on to add additional content to the letter, and save it to a desired location. There are presently many kinds of templates available. Letters, resumes, memos, and so forth are commonly created from word processing application templates, while web pages of various styles are created from templates in webpage editing software, and various files created for software applications are generated from templates in Integrated Development Environments (IDEs).
More particularly, with reference to IDE's, note that most modern software is typically created with a great deal of computer automated assistance. Such assistance is commercially available through any of a number of IDEs. For example, MICROSOFT'S VISUAL STUDIO®, BORLAND'S C++ BUILDER®, METROWERK'S CODE WARRIOR®, and IBM'S WEBSPHERE STUDIO® are all products presently available to assist in software creation. Such products provide a range of useful functions, such as templates for creating new files, that may be subsequently adapted to the particular needs of an undertaking. Other IDE functions include coordinating communications between multiple developers working together on large applications, assisting in the actual writing of source code, assisting in specifying how a source code file will be compiled, and providing compilers and other processes that convert source code files and the like into executable files.
While many IDE users are familiar with and commonly use templates, fewer IDE users create their own templates for later use. This is at least in part because the creation of templates in modern IDEs is time-consuming, difficult, and error prone. It involves the creation of at least two, if not more, separate files to instruct a template building engine in the details of desired template properties. A first file may point to a template wizard dialog process which allows user insertion of file properties. A second file provides the code for placing and formatting the user-entered data into the document created from the template. Because the second file is javascript code and not written in an easily debuggable language such as compiled code, such authored templates are difficult to debug and therefore difficult to author.
The difficulty of creating custom templates in modern IDEs is particularly troublesome in light of the working needs of modern software developers. Developers are a group of computer users who uniquely benefit from the use of templates. Developers understand the details of their own work better than the properties of a factory-provided template. Developers may often work on related software projects, or improvements and optimizations of past projects, that lend themselves to re-use of previously developed code. Redundant coding is highly inefficient and can be frustrating for developers as they reconsider problems that may have already been thought through.
Perhaps more importantly, leveraging past work without a template can be error-prone. When a previously developed file is re-used, the properties of the file must be uniformly updated, or the resulting software may not operate properly. Thus, developers are a group of computer users that derive particular advantage from the use of templates, so the ability to efficiently create new, custom templates is a feature of great advantage in IDE software.
Two of the most important features in templates which are used inside any program are the ability to easily exchange and easily author templates. For some applications, objects naturally lend themselves to being a single file. MICROSOFT WORD® is an example of such an application. Template creation and exchange is simplified. All the data and metadata for the template is stored in a single file, (e.g., the_.dot file for MICROSOFT WORD®). However, developer templates are by nature hard to author and exchange. For developers, template authoring and exchange is equally if not more important than for other application types. Leveraging existing code and the work of others is a common productivity practice in the development industry. Developers frequently leverage each others' code to build iteratively more complex and fully functional applications. Templates are a key part of this process. They serve a variety of functions: (1)starting points for essential building blocks such as UI-based applications or libraries; (2) fully functional applications which can be taken by others and customized to meet particular customer needs (ex: website samples); (3) building block libraries or functions which are written by one architect inside a development team and then leveraged for a variety of applications; (4) outlines of key best practices for writing code blocks which are written by senior devs and leverage by junior devs in a team development environment. Templates may contain (as a list of examples and not a complete rendering): (1) code blocks; (2) build settings; (3) re-usable components or libraries. These templates then appear in the New Project and/or Add New Item and or/New File dialogs in VISUAL STUDIO®, for example, for the user to create new projects/add files to his/her project. Code Projects are in format inherently complex on disk. They usually contain some form of metadata build settings file, code files, and may additionally contain documentation, graphical or string resources, etc. Template creation is also necessarily a user-customizable process; authors may wish to see certain files opened/closed in the IDE on create, customize whether the user is prompted to enter a name, use the user-entered name to name certain items (files, classes, etc.) in the created project, show custom UI to gather information and customize the build configuration, etc.
Therefore, there is a need in the art to support the ability of developers to be able to both easily author templates and to be able to easily exchange them in a single file format.